// 定义一个抽象类
class Animal {
    speak () {
        throw new Error('这个方法没有实现')
    }
}

// 实现类
class Dog extends Animal {
    speak () {
        return '汪!'
    }
}
class Cat extends Animal {
    speak () {
        return '瞄!'
    }
}

// 实现工厂方法
class AnimalFactory {
    createAnimal (animalType) {
        switch (animalType) {
            case 'dog':
                return new Dog()
            case 'cat':
                return new Cat()
            default:
                throw new Error('位置类型:' + animalType)
        }
    }
}

// 使用工厂方法创建对象
const animalFactory = new AnimalFactory()
const dog = animalFactory.createAnimal('dog')
console.log(dog.speak())
const cat = animalFactory.createAnimal('cat')
console.log(cat.speak())